package org.coopac.controller.plataforma;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListDataEvent;

import org.coopac.model.CoopacDatosLaborales;
import org.coopac.model.CoopacDireccionPersona;
import org.coopac.model.CoopacDocumentoPersona;
import org.coopac.model.CoopacPersona;
import org.coopac.model.CoopacRelacionPersona;
import org.coopac.model.CoopacTelefonoPersona;
import org.coopac.model.CoopacTipoMaestro;
import org.coopac.model.CoopacUbigeo;
import org.coopac.service.IDatosLaboralesService;
import org.coopac.service.IDireccionPersonaService;
import org.coopac.service.IDocumentoPersonaService;
import org.coopac.service.IPersonaService;
import org.coopac.service.IRelacionPersonaService;
import org.coopac.service.ITelefonoPersonaService;
import org.coopac.service.ITipoMaestroService;
import org.coopac.service.IUbigeoService;


@ManagedBean(name="fichaSocioP")
@ViewScoped
public class FichaSocioPController implements Serializable{
	
	@ManagedProperty(value = "#{personaService}")
	IPersonaService personaServicio;
	
	@ManagedProperty(value = "#{documentoPersonaService}")
	IDocumentoPersonaService 	documentoService;
	
	@ManagedProperty(value = "#{telefonoPersonaService}")
	ITelefonoPersonaService 	telefonoService;
	
	@ManagedProperty(value = "#{direccionPersonaService}")
	IDireccionPersonaService 	direccionService;
	
	@ManagedProperty(value = "#{datoslaboralesService}" )
	IDatosLaboralesService 		datosLaboralesService;
	
	@ManagedProperty(value = "#{relacionPersonaService}")
	IRelacionPersonaService 	relacionPeronsaService;
	
	@ManagedProperty(value = "#{ubigeoService}")
	IUbigeoService 				ubigeoService;
	
	@ManagedProperty(value = "#{tipoMaestroService}")
	ITipoMaestroService 		tipoMaestroService;
	
	@SuppressWarnings("rawtypes")  
	DataModel					datamodel;
	
	@SuppressWarnings("rawtypes")
	DataModel					datamodeltwo;
	
	CoopacPersona 				personaN;
	CoopacDocumentoPersona 		documentoPersonaN;
	CoopacDireccionPersona 		direccionPersonaN;
	CoopacTelefonoPersona  		telefonoFijoPersonaN;
	CoopacTelefonoPersona  		telefonoCelPersonaN;
	CoopacTelefonoPersona  		telefonoOtrosPersonaN;
	CoopacDatosLaborales   		datosLaboralesPersonaN;
	
	
	CoopacPersona 				personaConyugue;
	CoopacDocumentoPersona 		documentoPersonaConyugue;
	CoopacRelacionPersona 		relacionPersonaConyugue;
	
	CoopacPersona 				personaIntegranteFamilia;
	CoopacDocumentoPersona 		documentoIntegranteFamilia;
	CoopacRelacionPersona 		relacionIntegranteFamilia;

	CoopacTipoMaestro			tipoPersona,
								tipoDocumentoN,
								tipoEstadoCivilN,
								tipoGradoEstudioN,
								tipoTelefonoN,
								tipoCelN,
								tipoFijoN,
								tipoZonaN,
								tipoViaN,
								tipoViviendaN,
								tipoIngresoN;
	
	CoopacTipoMaestro 			tipoDocumentoConyugue,
								tipoEstadoCivilConyugue,
								tipoGradoEstudioConyugue,
								tipoRelacionConyugue;
	
	CoopacTipoMaestro			tipoDocumentoIF,
								tipoEstadoCivilIF,
								tipoGradoEstudioIF,
								tipoRelacionIF;
	
	CoopacUbigeo				distritoN;
	
	Boolean						openDatoLabo,
								openDatConyFam,
								openDataIntegrateFam,
								existingSearch,
								disableBtnEditPersonaN,
								disableBtnClearPersonaN,
								disableBtnAddPersonaN,
								required;
	
	String						numdocumentoPersonaN;
	
	String						validate;
	
	
	/**
	 * Constructor
	 */
	
	public FichaSocioPController(){
		
		personaN 					= new CoopacPersona();
		documentoPersonaN			= new CoopacDocumentoPersona();
		direccionPersonaN			= new CoopacDireccionPersona();
		telefonoFijoPersonaN		= new CoopacTelefonoPersona();
		telefonoCelPersonaN			= new CoopacTelefonoPersona();
		telefonoOtrosPersonaN		= new CoopacTelefonoPersona();
		datosLaboralesPersonaN		= new CoopacDatosLaborales();
		
		
		personaConyugue				= new CoopacPersona();
		documentoPersonaConyugue	= new CoopacDocumentoPersona();
		relacionPersonaConyugue		= new CoopacRelacionPersona();
		
		personaIntegranteFamilia	= new CoopacPersona();
		documentoIntegranteFamilia	= new CoopacDocumentoPersona();
		relacionIntegranteFamilia	= new CoopacRelacionPersona();

		tipoPersona					= new CoopacTipoMaestro();
		tipoDocumentoN				= new CoopacTipoMaestro();
		tipoEstadoCivilN			= new CoopacTipoMaestro();
		tipoGradoEstudioN			= new CoopacTipoMaestro();
		tipoTelefonoN				= new CoopacTipoMaestro();
		tipoCelN					= new CoopacTipoMaestro();
		tipoFijoN					= new CoopacTipoMaestro();
		tipoZonaN					= new CoopacTipoMaestro();
		tipoViaN					= new CoopacTipoMaestro();
		tipoViviendaN				= new CoopacTipoMaestro();
		tipoIngresoN				= new CoopacTipoMaestro();
		
		tipoDocumentoConyugue		= new CoopacTipoMaestro();
		tipoEstadoCivilConyugue    	= new CoopacTipoMaestro();
		tipoGradoEstudioConyugue	= new CoopacTipoMaestro();
		tipoRelacionConyugue		= new CoopacTipoMaestro();
		
		tipoDocumentoIF				= new CoopacTipoMaestro();
		tipoEstadoCivilIF			= new CoopacTipoMaestro();
		tipoGradoEstudioIF			= new CoopacTipoMaestro();
		tipoRelacionIF				= new CoopacTipoMaestro();
		
		distritoN					= new CoopacUbigeo();
		openDatoLabo 				= true;
		openDatConyFam				= true;
		openDataIntegrateFam		= true;	
		existingSearch				= true;
		disableBtnEditPersonaN		= true;
		disableBtnClearPersonaN		= true;
		disableBtnAddPersonaN		= true;
		required					= false;
		
		personaN.setIdPersona(0);
		datosLaboralesPersonaN.setIdDatosLaborales(0);
		personaIntegranteFamilia.setIdPersona(0);
		personaConyugue.setIdPersona(0);
		
	}

	
	public CoopacPersona getPersonaN() {
		return personaN;
	}

	public void setPersonaN(CoopacPersona personaN) {
		this.personaN = personaN;
	}

	public CoopacDocumentoPersona getDocumentoPersonaN() {
		return documentoPersonaN;
	}

	public void setDocumentoPersonaN(CoopacDocumentoPersona documentoPersonaN) {
		this.documentoPersonaN = documentoPersonaN;
	}

	public CoopacDireccionPersona getDireccionPersonaN() {
		return direccionPersonaN;
	}

	public void setDireccionPersonaN(CoopacDireccionPersona direccionPersonaN) {
		this.direccionPersonaN = direccionPersonaN;
	}

	public CoopacTelefonoPersona getTelefonoFijoPersonaN() {
		return telefonoFijoPersonaN;
	}

	public void setTelefonoFijoPersonaN(CoopacTelefonoPersona telefonoFijoPersonaN) {
		this.telefonoFijoPersonaN = telefonoFijoPersonaN;
	}

	public CoopacTelefonoPersona getTelefonoCelPersonaN() {
		return telefonoCelPersonaN;
	}

	public void setTelefonoCelPersonaN(CoopacTelefonoPersona telefonoCelPersonaN) {
		this.telefonoCelPersonaN = telefonoCelPersonaN;
	}

	public CoopacTelefonoPersona getTelefonoOtrosPersonaN() {
		return telefonoOtrosPersonaN;
	}

	public void setTelefonoOtrosPersonaN(CoopacTelefonoPersona telefonoOtrosPersonaN) {
		this.telefonoOtrosPersonaN = telefonoOtrosPersonaN;
	}

	public CoopacDatosLaborales getDatosLaboralesPersonaN() {
		return datosLaboralesPersonaN;
	}

	public void setDatosLaboralesPersonaN(
			CoopacDatosLaborales datosLaboralesPersonaN) {
		this.datosLaboralesPersonaN = datosLaboralesPersonaN;
	}

	public CoopacPersona getPersonaConyugue() {
		return personaConyugue;
	}

	public void setPersonaConyugue(CoopacPersona personaConyugue) {
		this.personaConyugue = personaConyugue;
	}

	public CoopacDocumentoPersona getDocumentoPersonaConyugue() {
		return documentoPersonaConyugue;
	}

	public void setDocumentoPersonaConyugue(
			CoopacDocumentoPersona documentoPersonaConyugue) {
		this.documentoPersonaConyugue = documentoPersonaConyugue;
	}

	public CoopacRelacionPersona getRelacionPersonaConyugue() {
		return relacionPersonaConyugue;
	}

	public void setRelacionPersonaConyugue(
			CoopacRelacionPersona relacionPersonaConyugue) {
		this.relacionPersonaConyugue = relacionPersonaConyugue;
	}

	public CoopacPersona getPersonaIntegranteFamilia() {
		return personaIntegranteFamilia;
	}

	public void setPersonaIntegranteFamilia(CoopacPersona personaIntegranteFamilia) {
		this.personaIntegranteFamilia = personaIntegranteFamilia;
	}

	public CoopacDocumentoPersona getDocumentoIntegranteFamilia() {
		return documentoIntegranteFamilia;
	}

	public void setDocumentoIntegranteFamilia(
			CoopacDocumentoPersona documentoIntegranteFamilia) {
		this.documentoIntegranteFamilia = documentoIntegranteFamilia;
	}

	public CoopacRelacionPersona getRelacionIntegranteFamilia() {
		return relacionIntegranteFamilia;
	}

	public void setRelacionIntegranteFamilia(
			CoopacRelacionPersona relacionIntegranteFamilia) {
		this.relacionIntegranteFamilia = relacionIntegranteFamilia;
	}

	public CoopacTipoMaestro getTipoPersona() {
		return tipoPersona;
	}

	public void setTipoPersona(CoopacTipoMaestro tipoPersona) {
		this.tipoPersona = tipoPersona;
	}

	public CoopacTipoMaestro getTipoDocumentoN() {
		return tipoDocumentoN;
	}

	public void setTipoDocumentoN(CoopacTipoMaestro tipoDocumentoN) {
		this.tipoDocumentoN = tipoDocumentoN;
	}

	public CoopacTipoMaestro getTipoEstadoCivilN() {
		return tipoEstadoCivilN;
	}

	public void setTipoEstadoCivilN(CoopacTipoMaestro tipoEstadoCivilN) {
		this.tipoEstadoCivilN = tipoEstadoCivilN;
	}

	public CoopacTipoMaestro getTipoGradoEstudioN() {
		return tipoGradoEstudioN;
	}

	public void setTipoGradoEstudioN(CoopacTipoMaestro tipoGradoEstudioN) {
		this.tipoGradoEstudioN = tipoGradoEstudioN;
	}

	public CoopacTipoMaestro getTipoTelefonoN() {
		return tipoTelefonoN;
	}

	public void setTipoTelefonoN(CoopacTipoMaestro tipoTelefonoN) {
		this.tipoTelefonoN = tipoTelefonoN;
	}

	public CoopacTipoMaestro getTipoZonaN() {
		return tipoZonaN;
	}

	public void setTipoZonaN(CoopacTipoMaestro tipoZonaN) {
		this.tipoZonaN = tipoZonaN;
	}

	public CoopacTipoMaestro getTipoViaN() {
		return tipoViaN;
	}

	public void setTipoViaN(CoopacTipoMaestro tipoViaN) {
		this.tipoViaN = tipoViaN;
	}

	public CoopacTipoMaestro getTipoViviendaN() {
		return tipoViviendaN;
	}

	public void setTipoViviendaN(CoopacTipoMaestro tipoViviendaN) {
		this.tipoViviendaN = tipoViviendaN;
	}

	public CoopacTipoMaestro getTipoIngresoN() {
		return tipoIngresoN;
	}

	public void setTipoIngresoN(CoopacTipoMaestro tipoIngresoN) {
		this.tipoIngresoN = tipoIngresoN;
	}

	public CoopacTipoMaestro getTipoDocumentoConyugue() {
		return tipoDocumentoConyugue;
	}

	public void setTipoDocumentoConyugue(CoopacTipoMaestro tipoDocumentoConyugue) {
		this.tipoDocumentoConyugue = tipoDocumentoConyugue;
	}

	public CoopacTipoMaestro getTipoEstadoCivilConyugue() {
		return tipoEstadoCivilConyugue;
	}

	public void setTipoEstadoCivilConyugue(CoopacTipoMaestro tipoEstadoCivilConyugue) {
		this.tipoEstadoCivilConyugue = tipoEstadoCivilConyugue;
	}

	public CoopacTipoMaestro getTipoGradoEstudioConyugue() {
		return tipoGradoEstudioConyugue;
	}

	public void setTipoGradoEstudioConyugue(
			CoopacTipoMaestro tipoGradoEstudioConyugue) {
		this.tipoGradoEstudioConyugue = tipoGradoEstudioConyugue;
	}

	public CoopacTipoMaestro getTipoRelacionConyugue() {
		return tipoRelacionConyugue;
	}

	public void setTipoRelacionConyugue(CoopacTipoMaestro tipoRelacionConyugue) {
		this.tipoRelacionConyugue = tipoRelacionConyugue;
	}

	public CoopacTipoMaestro getTipoDocumentoIF() {
		return tipoDocumentoIF;
	}

	public void setTipoDocumentoIF(CoopacTipoMaestro tipoDocumentoIF) {
		this.tipoDocumentoIF = tipoDocumentoIF;
	}

	public CoopacTipoMaestro getTipoEstadoCivilIF() {
		return tipoEstadoCivilIF;
	}

	public void setTipoEstadoCivilIF(CoopacTipoMaestro tipoEstadoCivilIF) {
		this.tipoEstadoCivilIF = tipoEstadoCivilIF;
	}

	public CoopacTipoMaestro getTipoGradoEstudioIF() {
		return tipoGradoEstudioIF;
	}

	public void setTipoGradoEstudioIF(CoopacTipoMaestro tipoGradoEstudioIF) {
		this.tipoGradoEstudioIF = tipoGradoEstudioIF;
	}

	public CoopacTipoMaestro getTipoRelacionIF() {
		return tipoRelacionIF;
	}

	public void setTipoRelacionIF(CoopacTipoMaestro tipoRelacionIF) {
		this.tipoRelacionIF = tipoRelacionIF;
	}

	public CoopacTipoMaestro getTipoCelN() {
		return tipoCelN;
	}

	public void setTipoCelN(CoopacTipoMaestro tipoCelN) {
		this.tipoCelN = tipoCelN;
	}

	public CoopacTipoMaestro getTipoFijoN() {
		return tipoFijoN;
	}

	public void setTipoFijoN(CoopacTipoMaestro tipoFijoN) {
		this.tipoFijoN = tipoFijoN;
	}

	public CoopacUbigeo getDistritoN() {
		return distritoN;
	}

	public void setDistritoN(CoopacUbigeo distritoN) {
		this.distritoN = distritoN;
	}

	public IPersonaService getPersonaServicio() {
		return personaServicio;
	}

	public void setPersonaServicio(IPersonaService personaServicio) {
		this.personaServicio = personaServicio;
	}

	public IDocumentoPersonaService getDocumentoService() {
		return documentoService;
	}

	public void setDocumentoService(IDocumentoPersonaService documentoService) {
		this.documentoService = documentoService;
	}

	public ITelefonoPersonaService getTelefonoService() {
		return telefonoService;
	}

	public void setTelefonoService(ITelefonoPersonaService telefonoService) {
		this.telefonoService = telefonoService;
	}

	public IDireccionPersonaService getDireccionService() {
		return direccionService;
	}

	public void setDireccionService(IDireccionPersonaService direccionService) {
		this.direccionService = direccionService;
	}

	public IDatosLaboralesService getDatosLaboralesService() {
		return datosLaboralesService;
	}

	public void setDatosLaboralesService(
			IDatosLaboralesService datosLaboralesService) {
		this.datosLaboralesService = datosLaboralesService;
	}

	public IRelacionPersonaService getRelacionPeronsaService() {
		return relacionPeronsaService;
	}

	public void setRelacionPeronsaService(
			IRelacionPersonaService relacionPeronsaService) {
		this.relacionPeronsaService = relacionPeronsaService;
	}

	public IUbigeoService getUbigeoService() {
		return ubigeoService;
	}

	public void setUbigeoService(IUbigeoService ubigeoService) {
		this.ubigeoService = ubigeoService;
	}

	public ITipoMaestroService getTipoMaestroService() {
		return tipoMaestroService;
	}

	public void setTipoMaestroService(ITipoMaestroService tipoMaestroService) {
		this.tipoMaestroService = tipoMaestroService;
	}
	
	public Boolean getOpenDatoLabo() {
		return openDatoLabo;
	}

	public void setOpenDatoLabo(Boolean openDatoLabo) {
		this.openDatoLabo = openDatoLabo;
	}
	
	public Boolean getOpenDatConyFam() {
		return openDatConyFam;
	}
	public void setOpenDatConyFam(Boolean openDatConyFam) {
		this.openDatConyFam = openDatConyFam;
	}

	public Boolean getOpenDataIntegrateFam() {
		return openDataIntegrateFam;
	}

	public void setOpenDataIntegrateFam(Boolean openDataIntegrateFam) {
		this.openDataIntegrateFam = openDataIntegrateFam;
	}

	public String getNumdocumentoPersonaN() {
		return numdocumentoPersonaN;
	}

	public void setNumdocumentoPersonaN(String numdocumentoPersonaN) {
		this.numdocumentoPersonaN = numdocumentoPersonaN;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public DataModel getDatamodel() {
		List<CoopacDatosLaborales> list = datosLaboralesService.listByIdPersona(personaN.getIdPersona());
		datamodel = new ListDataModel(list);
		return datamodel;
	}
	
	@SuppressWarnings({ "rawtypes" })
	public void setDatamodel(DataModel datamodel) {
		this.datamodel = datamodel;
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public DataModel getDatamodeltwo() {
		List<CoopacRelacionPersona> list = relacionPeronsaService.listaByIdPersonaUno(personaN.getIdPersona());
		datamodeltwo = new ListDataModel(list);
		return datamodeltwo;
	}

	@SuppressWarnings({ "rawtypes" })
	public void setDatamodeltwo(DataModel datamodeltwo) {
		this.datamodeltwo = datamodeltwo;
	}

	public Boolean getExistingSearch() {
		return existingSearch;
	}

	public void setExistingSearch(Boolean existingSearch) {
		this.existingSearch = existingSearch;
	}

	public Boolean getDisableBtnEditPersonaN() {
		return disableBtnEditPersonaN;
	}

	public void setDisableBtnEditPersonaN(Boolean disableBtnEditPersonaN) {
		this.disableBtnEditPersonaN = disableBtnEditPersonaN;
	}

	public Boolean getDisableBtnClearPersonaN() {
		return disableBtnClearPersonaN;
	}

	public void setDisableBtnClearPersonaN(Boolean disableBtnClearPersonaN) {
		this.disableBtnClearPersonaN = disableBtnClearPersonaN;
	}

	public Boolean getDisableBtnAddPersonaN() {
		return disableBtnAddPersonaN;
	}

	public void setDisableBtnAddPersonaN(Boolean disableBtnAddPersonaN) {
		this.disableBtnAddPersonaN = disableBtnAddPersonaN;
	}

	public String getValidate() {
		return validate;
	}

	public void setValidate(String validate) {
		this.validate = validate;
	}

	public Boolean getRequired() {
		return required;
	}

	public void setRequired(Boolean required) {
		this.required = required;
	}


	public void addPersonaN(ActionEvent event){
		
		tipoPersona.setIdTipoMaestro(51);
		personaN.setCoopacTipoMaestroByIdTipoMaestroPersona(tipoPersona);
		personaN.setCoopacTipoMaestroByIdTipoMaestroEstadoCivil(tipoEstadoCivilN);
		personaN.setCoopacTipoMaestroByIdTipoMaestroGradoEstudios(tipoGradoEstudioN);
		personaN.setFlag(true);
		
		
		documentoPersonaN.setCoopacPersona(personaN);
		documentoPersonaN.setCoopacTipoMaestro(tipoDocumentoN);
		documentoPersonaN.setFlag(true);
		
		
		telefonoFijoPersonaN.setCoopacPersona(personaN);
		tipoFijoN.setIdTipoMaestro(38);
		telefonoFijoPersonaN.setCoopacTipoMaestro(tipoFijoN);		
		telefonoCelPersonaN.setCoopacPersona(personaN);
		tipoCelN.setIdTipoMaestro(39);
		telefonoCelPersonaN.setCoopacTipoMaestro(tipoCelN);		
		telefonoOtrosPersonaN.setCoopacPersona(personaN);
		telefonoOtrosPersonaN.setCoopacTipoMaestro(tipoTelefonoN);		
		
		
		direccionPersonaN.setCoopacPersona(personaN);
		direccionPersonaN.setCoopacTipoMaestroByIdTipoMaestroZona(tipoZonaN);
		direccionPersonaN.setCoopacTipoMaestroByIdTipoMaestroVivienda(tipoViviendaN);
		direccionPersonaN.setCoopacTipoMaestroByIdTipoMaestroVia(tipoViaN);
		direccionPersonaN.setCoopacUbigeo(distritoN);
		direccionPersonaN.setFlag(true);
		
		
		if(personaN.getIdPersona()!=0){
			personaServicio.update(personaN);
			documentoService.update(documentoPersonaN);
			telefonoService.update(telefonoFijoPersonaN);
			telefonoService.update(telefonoCelPersonaN);
			telefonoService.update(telefonoOtrosPersonaN);
			direccionService.update(direccionPersonaN);
		}else{
			personaServicio.save(personaN);
			documentoService.save(documentoPersonaN);
			telefonoService.save(telefonoFijoPersonaN);
			telefonoService.save(telefonoCelPersonaN);
			telefonoService.save(telefonoOtrosPersonaN);
			direccionService.save(direccionPersonaN);
		}
			
			openDatoLabo 				= false;
			disableBtnAddPersonaN		= true;
			disableBtnClearPersonaN		= true;
			disableBtnEditPersonaN		= false;
		
	}

	public void addDatosLaborales(ActionEvent event){
		
		datosLaboralesPersonaN.setCoopacPersona(personaN);
		datosLaboralesPersonaN.setCoopacDireccionPersona(direccionPersonaN);
		datosLaboralesPersonaN.setCoopacTipoMaestroByIdTipoMaestroIngreso(tipoIngresoN);		
		if(datosLaboralesPersonaN.getIdDatosLaborales()!=0 ){
			datosLaboralesService.update(datosLaboralesPersonaN);
			datosLaboralesPersonaN.setIdDatosLaborales(0);
		}else{
			datosLaboralesService.save(datosLaboralesPersonaN);
			datosLaboralesPersonaN.setIdDatosLaborales(0);

			if(tipoEstadoCivilN.getIdTipoMaestro().equals(81) || tipoEstadoCivilN.getIdTipoMaestro().equals(84))
				openDatConyFam = false;
		}
//		openDatConyFam = false;
		openDataIntegrateFam = false;
	}
	
	public void addDatosConyugue(ActionEvent event){
		
		tipoPersona.setIdTipoMaestro(51);
		personaConyugue.setCoopacTipoMaestroByIdTipoMaestroPersona(tipoPersona);
		personaConyugue.setCoopacTipoMaestroByIdTipoMaestroGradoEstudios(tipoGradoEstudioConyugue);
		personaConyugue.setCoopacTipoMaestroByIdTipoMaestroEstadoCivil(tipoEstadoCivilConyugue);
		personaConyugue.setFlag(true);
		
		documentoPersonaConyugue.setCoopacPersona(personaConyugue);
		documentoPersonaConyugue.setCoopacTipoMaestro(tipoDocumentoConyugue);
		documentoPersonaConyugue.setFlag(true);
		
		relacionPersonaConyugue.setCoopacPersonaByIdPersonaUno(personaN);
		relacionPersonaConyugue.setCoopacPersonaByIdPersonaDos(personaConyugue);
		tipoRelacionConyugue.setIdTipoMaestro(102);
		relacionPersonaConyugue.setCoopacTipoMaestro(tipoRelacionConyugue);
		
		if(personaConyugue.getIdPersona() !=0){
			personaServicio.update(personaConyugue);
			documentoService.update(documentoPersonaConyugue);
			relacionPeronsaService.save(relacionPersonaConyugue);
		}else{
			personaServicio.save(personaConyugue);
			documentoService.save(documentoPersonaConyugue);
			relacionPeronsaService.save(relacionPersonaConyugue);			
		}
		existingSearch = false;
		openDatConyFam = true;
	}
	
	public void addIntegrantesFamilia(ActionEvent event){
		
		personaIntegranteFamilia.setCoopacTipoMaestroByIdTipoMaestroPersona(tipoPersona);
		personaIntegranteFamilia.setCoopacTipoMaestroByIdTipoMaestroEstadoCivil(tipoEstadoCivilIF);
		personaIntegranteFamilia.setCoopacTipoMaestroByIdTipoMaestroGradoEstudios(tipoGradoEstudioIF);
		personaIntegranteFamilia.setFlag(true);
		
		
		relacionIntegranteFamilia.setCoopacPersonaByIdPersonaUno(personaN);
		relacionIntegranteFamilia.setCoopacPersonaByIdPersonaDos(personaIntegranteFamilia);
		relacionIntegranteFamilia.setCoopacTipoMaestro(tipoRelacionIF);
		relacionIntegranteFamilia.setFlag(true);
		
			
		documentoIntegranteFamilia.setCoopacPersona(personaIntegranteFamilia);
		documentoIntegranteFamilia.setCoopacTipoMaestro(tipoDocumentoIF);
		documentoIntegranteFamilia.setFlag(true);
		
		
		if(personaIntegranteFamilia.getIdPersona()!= 0){
			personaServicio.update(personaIntegranteFamilia);
			relacionPeronsaService.update(relacionIntegranteFamilia);
			documentoService.update(documentoIntegranteFamilia);
			personaIntegranteFamilia.setIdPersona(0);
		}else{
			personaServicio.save(personaIntegranteFamilia);
			relacionPeronsaService.save(relacionIntegranteFamilia);
			documentoService.save(documentoIntegranteFamilia);
			personaIntegranteFamilia.setIdPersona(0);
		}
	}
	
	
	public void buscarByNumDocumento(ActionEvent event) {
		try {
			
			if(documentoService.getPersonaByDocumento(numdocumentoPersonaN)!=null){
				existingSearch 					=  true;
				disableBtnEditPersonaN 			=  false;
				openDatoLabo					=  false;
				openDataIntegrateFam			=  false;
				disableBtnAddPersonaN			=  true;
				disableBtnClearPersonaN			=  true;
				
				documentoPersonaN  = documentoService.getPersonaByDocumento(numdocumentoPersonaN);
				Integer idpersona;
				idpersona =  documentoPersonaN.getCoopacPersona().getIdPersona();
				if(!idpersona.equals("") || !idpersona.equals(null) ) openDatoLabo = false; openDatConyFam = true; openDataIntegrateFam = false;
				personaN = personaServicio.getById(idpersona);
				telefonoFijoPersonaN = telefonoService.getTelefonoByPersona(idpersona);
				telefonoCelPersonaN = telefonoService.getTelefonoByPersona(idpersona);
				telefonoOtrosPersonaN = telefonoService.getTelefonoByPersona(idpersona);
				direccionPersonaN = direccionService.getDireccionByPersona(idpersona);
				
				datosLaboralesPersonaN.setIdDatosLaborales(0);
				
				tipoEstadoCivilN.setIdTipoMaestro(personaN.getCoopacTipoMaestroByIdTipoMaestroEstadoCivil().getIdTipoMaestro());
				tipoGradoEstudioN.setIdTipoMaestro(personaN.getCoopacTipoMaestroByIdTipoMaestroGradoEstudios().getIdTipoMaestro());		
				tipoDocumentoN.setIdTipoMaestro(documentoPersonaN.getCoopacTipoMaestro().getIdTipoMaestro());		
				tipoFijoN.setIdTipoMaestro(telefonoFijoPersonaN.getCoopacTipoMaestro().getIdTipoMaestro());
				tipoCelN.setIdTipoMaestro(telefonoCelPersonaN.getCoopacTipoMaestro().getIdTipoMaestro());		
				tipoTelefonoN.setIdTipoMaestro(telefonoOtrosPersonaN.getCoopacTipoMaestro().getIdTipoMaestro());		
				tipoZonaN.setIdTipoMaestro(direccionPersonaN.getCoopacTipoMaestroByIdTipoMaestroZona().getIdTipoMaestro());
				tipoViviendaN.setIdTipoMaestro(direccionPersonaN.getCoopacTipoMaestroByIdTipoMaestroVivienda().getIdTipoMaestro());
				distritoN.setIdUbigeo(direccionPersonaN.getCoopacUbigeo().getIdUbigeo());
				tipoViaN.setIdTipoMaestro(direccionPersonaN.getCoopacTipoMaestroByIdTipoMaestroVia().getIdTipoMaestro());
				
				if(tipoEstadoCivilN.getIdTipoMaestro().equals(81) || tipoEstadoCivilN.getIdTipoMaestro().equals(84))
					openDatConyFam = false;
								
			}else{
				required						= false;
				clearPersonaN(event);
				existingSearch					= false;
				disableBtnAddPersonaN			= true;
				disableBtnClearPersonaN			= true;
				disableBtnEditPersonaN			= true;
				openDatoLabo					= true;
				openDataIntegrateFam			= true;
				openDatConyFam					= true;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}
	
	public void editPersona(ActionEvent event){
		System.out.println("editando");
		openDatoLabo 				= true;
		openDatConyFam				= true;
		openDataIntegrateFam		= true;
		disableBtnAddPersonaN		= false;
		disableBtnClearPersonaN		= false;
		disableBtnEditPersonaN		= true;
		required					= true;
	}
	
	public void editDatosLaborales(ActionEvent event){
		try {
			UIParameter component = (UIParameter) event.getComponent().findComponent("editDatosLaborales");
			Integer idDatosLaborales =  (Integer) component.getValue();
			datosLaboralesPersonaN = datosLaboralesService.getById(idDatosLaborales);
			tipoIngresoN.setIdTipoMaestro(datosLaboralesPersonaN.getCoopacTipoMaestroByIdTipoMaestroIngreso().getIdTipoMaestro());			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	
	public void deleteDatosLaborales(ActionEvent event){
		try {
			UIParameter component = (UIParameter) event.getComponent().findComponent("deletDatosLaborales");
			Integer idDatosLaborales =  (Integer) component.getValue();
			datosLaboralesPersonaN = datosLaboralesService.getById(idDatosLaborales);
			datosLaboralesService.delete(datosLaboralesPersonaN);
			datosLaboralesPersonaN.setIdDatosLaborales(0);
			clearDatosLaboralesN(event);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editIntegrantesFamilia(ActionEvent event){
		try {
			UIParameter component = (UIParameter) event.getComponent().findComponent("editIntegranteFamilia");
			Integer idIntegranteFamilia = (Integer) component.getValue();
			
			relacionIntegranteFamilia = relacionPeronsaService.getById(idIntegranteFamilia);
			Integer idPersonaIntegrante = relacionIntegranteFamilia.getCoopacPersonaByIdPersonaDos().getIdPersona();
			
			personaIntegranteFamilia = personaServicio.getById(idPersonaIntegrante);
			
			documentoIntegranteFamilia = documentoService.getByIdPersona(idPersonaIntegrante);
			
			tipoPersona.setIdTipoMaestro(personaIntegranteFamilia.getCoopacTipoMaestroByIdTipoMaestroPersona().getIdTipoMaestro());
			tipoEstadoCivilIF.setIdTipoMaestro(personaIntegranteFamilia.getCoopacTipoMaestroByIdTipoMaestroEstadoCivil().getIdTipoMaestro());
			tipoGradoEstudioIF.setIdTipoMaestro(personaIntegranteFamilia.getCoopacTipoMaestroByIdTipoMaestroGradoEstudios().getIdTipoMaestro());
			tipoDocumentoIF.setIdTipoMaestro(documentoIntegranteFamilia.getCoopacTipoMaestro().getIdTipoMaestro());
			tipoRelacionIF.setIdTipoMaestro(relacionIntegranteFamilia.getCoopacTipoMaestro().getIdTipoMaestro());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void deleteIntegrantesFamilia(ActionEvent event){
			try {
				UIParameter component = (UIParameter) event.getComponent().findComponent("deletIntegranteFamilia");
				Integer idIntegranteFamilia = (Integer) component.getValue();
				relacionIntegranteFamilia = relacionPeronsaService.getById(idIntegranteFamilia);
				relacionPeronsaService.delete(relacionIntegranteFamilia);
			} catch (Exception e) {
				e.printStackTrace();
			}
		
	}
	
	public void clearPersonaN(ActionEvent event){
		personaN.setApellidoPaternoRazonSocial("");
		personaN.setApellidoMaterno("");
		personaN.setNombrePersonaNombreComercial("");
		personaN.setOcupacion("");
		personaN.setPaginaWeb("");
		personaN.setProfesion("");
		personaN.setEmail("");
		personaN.setSexo("");
		documentoPersonaN.setNumero("");
		
		telefonoFijoPersonaN.setNumero("");
		telefonoFijoPersonaN.setAnexo("");
		telefonoCelPersonaN.setNumero("");
		telefonoOtrosPersonaN.setNumero("");
		telefonoOtrosPersonaN.setAnexo("");
		
		
		direccionPersonaN.setNombreZona("");
		direccionPersonaN.setNombreVia("");
		direccionPersonaN.setNumero("");
		direccionPersonaN.setDepartamento("");
		direccionPersonaN.setInterior("");
		direccionPersonaN.setManzana("");
		direccionPersonaN.setLote("");
		direccionPersonaN.setKilometro("");
		direccionPersonaN.setReferencia("");
		
		
		
		tipoDocumentoN.setIdTipoMaestro(null);
		tipoEstadoCivilN.setIdTipoMaestro(null);
		tipoGradoEstudioN.setIdTipoMaestro(null);
		tipoFijoN.setIdTipoMaestro(null);
		tipoCelN.setIdTipoMaestro(null);
		tipoTelefonoN.setIdTipoMaestro(null);
		tipoZonaN.setIdTipoMaestro(null);
		tipoViviendaN.setIdTipoMaestro(null);
		tipoViaN.setIdTipoMaestro(null);
		distritoN.setIdUbigeo(null);
		
		numdocumentoPersonaN 		= "";
		openDatoLabo 				= true;
		openDatConyFam				= true;
		openDataIntegrateFam		= true;
		existingSearch				= false;
	}
	
	
	
	public void clearDatosLaboralesN(ActionEvent event){
		
		datosLaboralesPersonaN.setEmpresa("");
		datosLaboralesPersonaN.setIngresoMensual("");
		datosLaboralesPersonaN.setDescripcionCargo("");
		datosLaboralesPersonaN.setFechaInicio("");
		
		tipoIngresoN.setIdTipoMaestro(null);
		
	} 
	
	public void newbtnPeronsN(ActionEvent event){
		clearPersonaN(event);
		disableBtnAddPersonaN		= false;
		disableBtnClearPersonaN		= false;
		required					= true;
		
	}
	
	public void clearIntegratesFamilia(ActionEvent event){
		
		personaIntegranteFamilia.setApellidoPaternoRazonSocial("");
		personaIntegranteFamilia.setApellidoMaterno("");
		personaIntegranteFamilia.setNombrePersonaNombreComercial("");
		personaIntegranteFamilia.setOcupacion("");
		personaIntegranteFamilia.setProfesion("");
		personaIntegranteFamilia.setSexo("");
		
		documentoIntegranteFamilia.setNumero("");
		
		tipoDocumentoIF.setIdTipoMaestro(null);
		tipoEstadoCivilIF.setIdTipoMaestro(null);
		tipoGradoEstudioIF.setIdTipoMaestro(null);
		tipoRelacionIF.setIdTipoMaestro(null);
		
	}
	
}








